{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2c39402e-e246-4468-96d5-ae64e2a194c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入必要的库\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import datasets\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.metrics import classification_report, confusion_matrix\n",
    "from sklearn.preprocessing import StandardScaler\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c9b8f100-fc5e-4104-a4bc-39e187ec3c60",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1. 加载Iris数据集\n",
    "iris = datasets.load_iris()\n",
    "X = iris.data  # 特征\n",
    "y = iris.target  # 标签\n",
    "feature_names = iris.feature_names\n",
    "target_names = iris.target_names\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d8b02e13-a4db-47d9-92fd-f2798e5abe4f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2. 数据标准化\n",
    "scaler = StandardScaler()\n",
    "X_scaled = scaler.fit_transform(X)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6eaebb59-4376-4952-b72e-ca13835e448b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 3. 划分训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "48bcb048-92a3-4121-84a2-18de42087300",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4. 定义KNN模型\n",
    "knn = KNeighborsClassifier()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "41eb13f2-ce19-468c-8917-2629d117b193",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5. 定义超参数网格（比随机搜索更全面但更耗时）\n",
    "param_grid = {\n",
    "    'n_neighbors': list(range(1, 21)),  # k值从1到20\n",
    "    'weights': ['uniform', 'distance'],  # 邻居权重\n",
    "    'p': [1, 2],  # 距离度量（1:曼哈顿距离，2:欧式距离）\n",
    "}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "79f0f5bd-12a2-4e41-a1b9-77d2e0b4f217",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 6. 网格搜索超参数\n",
    "grid_search = GridSearchCV(\n",
    "    estimator=knn,\n",
    "    param_grid=param_grid,\n",
    "    cv=5,  # 5折交叉验证\n",
    "    scoring='accuracy',  # 评估指标\n",
    "    n_jobs=-1  # 使用所有CPU核心\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "62f230a2-32a4-4ae6-8c67-c5af9991a880",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=5, estimator=KNeighborsClassifier(), n_jobs=-1,\n",
       "             param_grid={&#x27;n_neighbors&#x27;: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n",
       "                                         13, 14, 15, 16, 17, 18, 19, 20],\n",
       "                         &#x27;p&#x27;: [1, 2], &#x27;weights&#x27;: [&#x27;uniform&#x27;, &#x27;distance&#x27;]},\n",
       "             scoring=&#x27;accuracy&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" ><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=5, estimator=KNeighborsClassifier(), n_jobs=-1,\n",
       "             param_grid={&#x27;n_neighbors&#x27;: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n",
       "                                         13, 14, 15, 16, 17, 18, 19, 20],\n",
       "                         &#x27;p&#x27;: [1, 2], &#x27;weights&#x27;: [&#x27;uniform&#x27;, &#x27;distance&#x27;]},\n",
       "             scoring=&#x27;accuracy&#x27;)</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" ><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">best_estimator_: KNeighborsClassifier</label><div class=\"sk-toggleable__content fitted\"><pre>KNeighborsClassifier(n_neighbors=7, p=1)</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" ><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;KNeighborsClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.neighbors.KNeighborsClassifier.html\">?<span>Documentation for KNeighborsClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>KNeighborsClassifier(n_neighbors=7, p=1)</pre></div> </div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "GridSearchCV(cv=5, estimator=KNeighborsClassifier(), n_jobs=-1,\n",
       "             param_grid={'n_neighbors': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n",
       "                                         13, 14, 15, 16, 17, 18, 19, 20],\n",
       "                         'p': [1, 2], 'weights': ['uniform', 'distance']},\n",
       "             scoring='accuracy')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 7. 执行搜索\n",
    "grid_search.fit(X_train, y_train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8cad7110-82c0-45f7-8b4c-069dc16a2b65",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳超参数: {'n_neighbors': 7, 'p': 1, 'weights': 'uniform'}\n",
      "最佳模型得分 (CV): 0.9523809523809523\n"
     ]
    }
   ],
   "source": [
    "# 8. 输出最佳参数和模型性能\n",
    "print(\"最佳超参数:\", grid_search.best_params_)\n",
    "print(\"最佳模型得分 (CV):\", grid_search.best_score_)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "d4ab5654-95e3-49d2-9f0a-71182818e0b9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "测试集分类报告：\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "      setosa       1.00      1.00      1.00        19\n",
      "  versicolor       1.00      1.00      1.00        13\n",
      "   virginica       1.00      1.00      1.00        13\n",
      "\n",
      "    accuracy                           1.00        45\n",
      "   macro avg       1.00      1.00      1.00        45\n",
      "weighted avg       1.00      1.00      1.00        45\n",
      "\n",
      "\n",
      "混淆矩阵：\n",
      "[[19  0  0]\n",
      " [ 0 13  0]\n",
      " [ 0  0 13]]\n"
     ]
    }
   ],
   "source": [
    "# 9. 在测试集上评估\n",
    "best_knn = grid_search.best_estimator_\n",
    "y_pred = best_knn.predict(X_test)\n",
    "\n",
    "print(\"\\n测试集分类报告：\")\n",
    "print(classification_report(y_test, y_pred, target_names=target_names))\n",
    "\n",
    "print(\"\\n混淆矩阵：\")\n",
    "print(confusion_matrix(y_test, y_pred))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "9e415ac1-4011-4335-a45a-f83df4614e53",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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DTh48CAAwNPTE++88w6Cg4Nx//33IzAw0PD6wYMHN5uoAvpCC6tXr272OTHxnTNnDoYPH44xY8bgtddew5IlSzBr1iz861//wjfffINz586hpqYGq1atwoIFC5Ceno4hQ4agvLy8yfyx2NhYnDp1yvD10aNHcffdd+PIkSPw8vJq9N7XeuaZZ/D4449j3Lhx2LNnT5vttn//ftx///2Gr2+88cZG7y36+9//Dg8PD7z66quNHh80aFCLicWNN94IjUaDw4cPN/u8m5tbo/e+lvg5DAsLaxTTZ599hm3btjX5fAMw9ID++eef+P333/HJJ5/gww8/xLFjx/D999+jrKwMQNPeqxEjRjQ5VnFxMebPn49NmzZh1apVhp/Xhh5++GF06dIF999/P3777TesWrUKCQkJLX5PACCTyfDAAw/g3XffZZJFZOeYZBGR3dBqtbj77rvx3//+F//5z38we/bsZvebMGECHn30UaOHDfbr1w8rVqzA0qVLjRo2COgrj9133334888/sWPHDowfPx4ymQw//fQTnnrqKQwfPhwfffRRq0N9Gl6It9fChQuxbt06/Prrr5g8eTJ0Oh3mzZvXbM/Nd999Z1TvD6DvfamuroZMJjPcXQf0F68SiaRJj09ubi7c3NwQFRUFQH9HfcKECfjuu+/w888/IzExEQqFAnv37jW85vLly4b9jVVYWIg9e/bgl19+Mel1ooa9EaKNGzdi2rRpze5fVVWF5557DgBw7NgxjBw50tD7GBkZia+++goPP/wwVq1ahXHjxuGrr76Cp6dno3N78uRJQw9XVVUV7r//fmRkZGDLli2Qy+WYMWMG/P39sWbNGnTu3NnwOjFBOnDgACZPnoznnnsOTz31FJYsWYJRo0ahe/fuWL58OQoLC+Ht7Y3jx4/Dzc0NKSkp6NevX7MFOjw8PJoMFwQaD3EDYKhe2JD4PX333XeoqakxPJ6UlIT33nuvSYXF3r17N/rseHt7N9sLJggCunbt2uS5urq6Jp+z6OhoXLx4sckxWvL2228DaNxT+/vvv2PDhg0AYBi62pBarUZ2dnaLQxG/+OILqNVq9OnTBzqdDs8++yz69OmDv/76CwBw5swZQ8L6/vvv488//2z0+rNnz2LcuHHw8vLC3r178fDDDze6IXGt1NRUvPvuu5gyZQpefPHFRr1/zZk6dSpef/11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ubnIt/nIufnIubn8Nd9MfAEAAAAAHkRPFgAAAAB4EEUWAAAAAHgQRRYAAAAAeBBFFkyzbt06DRw4UC1atFBKSoruu+8+FRcX19l2xIgRioiIUHR0tHNbtmyZyRH7vyVLligkJMQlj3fccUedbf/973+rc+fOioqK0vnnn6+lS5eaHK3/W7hwoUuuo6OjFRYWprCwsDrbc503zuHDh9WhQwetXLnSeWzdunXq3bu3oqKilJ6ertdee+2055g9e7ZSU1NltVp1+eWXa8eOHV6O2n/Vle+FCxeqS5cuiomJUceOHfXSSy/V+3rDMBQbGyur1epyzdf37wDqzvnEiRMVHh7uksPTXedc4w1zas7vueeeWt/rwcHBGjJkSJ2v5zp3z+l+EwbM97gBmCA3N9do0aKF8dJLLxmVlZXGgQMHjJ49exr33Xdfne2TkpKMzz//3OQoA8/kyZON22+//Yztdu3aZURGRhrvvvuuUVVVZfzrX/8ywsPDjR07dpgQZeD67bffjJSUFOOVV16p83mu87P39ddfGx07djQkGV999ZVhGIaRn59vtGrVyvjrX/9qVFRUGF9//bVhtVrrzfGbb75ptG7d2vjhhx+MiooK45FHHjE6dOhgVFRUmPhJ/ENd+f7888+NmJgYY82aNYbdbje++eYbIy4uznj//ffrPMePP/5ohISEGKWlpSZG7r/qyrlhGMYll1xivP76626dg2u8YerL+clWrlxp2Gw2Y8OGDXU+z3V+Zqf7TRhI3+MUWTDFd999Z/zud79zOTZnzhzjwgsvrNX2wIEDhiQjPz/frPAC1qBBg4znn3/+jO3+/Oc/G1dddVWt106ZMsVLkQU+u91uXHnllcYdd9xR5/Nc52fvjTfeMNq2bWssXrzY5cfQ66+/bpx77rkubceMGWPcdtttdZ6nf//+xpNPPul8XFpaalitVmPFihVei90f1ZfvuXPnGo8//rhL2+uvv96YOHFined56623jG7dunk52sBQX84rKyuNiIgIY+PGjW6dh2vcffXl/GS//fabkZSUZMydO7fe83Cdn9npfhMG0vc4wwVhil69eumDDz5wPjYMQ5mZmerVq1ettuvWrZPNZtPdd9+txMREdenSRW+88YaZ4QYEwzC0fv16ffnll+rQoYPS0tL0xz/+UUeOHKnVdsuWLeratavLsa5du2rr1q1mhRtwFi9erHXr1umZZ56p83mu87M3bNgw/fzzz/r973/vcryh1/Gp7SMiInTeeedx3Z+ivnzffffdmjFjhvNxXl6e/vOf/9T5vS45rnm73a6+ffsqISFBAwYM0Nq1a70au7863TVeVlam2bNnKzk5Weedd56efvpp2e32Os/DNe6++nJ+sunTp6tdu3a666676m3DdX5mp/tNGEjf4xRZMF1lZaXGjh2rHTt26Mknn6z1fGlpqfr3769p06YpOztbzz33nB544AEtWrTIB9H6r8OHD6tbt24aOXKktm3bprVr12rXrl267bbbarU9duyYrFaryzGr1aqioiKzwg0odrtdU6dO1aRJk9S6des623Cdn72kpCSFhITUOt7Q65jr3j315ftkOTk5uvrqq9W1a9c6v2Mkx4KiPXv21JIlS3TgwAFdd911GjJkiPbs2eONsP1afTnPz8/XlVdeqXvuuUf79+/XggUL9OKLL+rZZ5+t8zxc4+4703X+yy+/6PXXX9fs2bNlsVjqbcd13jCn/iYMpO9xiiyYKjc3V0OGDNHatWu1evVqJScn12pz66236tNPP1X37t0VEhKiIUOGaPTo0Xr//fd9ELH/SkhI0MqVKzVmzBhFRkaqbdu2mj17tpYtW6Zjx465tLXZbLVuyi0uLpbNZjMz5ICxevVq7dq1S2PGjKm3Dde55zX0Oua694z169erd+/eSklJ0UcffaSgoLp/WsyePVvz5s1TcnKyIiIiNGnSJLVr106ffvqpyRH7r0GDBumLL77QgAEDFBoaqt69e+uhhx7Se++9V2d7rnHPeeONN9ShQwcNGDDgtO24zt1X12/CQPoep8iCaTZv3qyLLrpILVq00LfffqsOHTrU2e7NN9+s9Q9GWVmZoqOjzQgzYGzbtk2PPfaYDMNwHisrK1NoaKjCw8Nd2nbu3FlbtmxxObZ582Z16dLFlFgDzeLFizVo0CClpqbW24br3PMaeh2f2r68vFw//fQT130DvP3227rssss0btw4ffDBB4qMjKy37dSpU7VhwwaXY+Xl5VzzDZCZmalXX33V5djpvje4xj1n8eLFGj169BnbcZ27p77fhAH1Pe7bW8LQXGRlZRnx8fHGpEmTDLvdftq2c+bMMRISEoyNGzca1dXVxieffGJERUUZX3/9tUnRBoasrCzDarUas2bNMiorK439+/cbl1xyiTF+/PhabXfs2GGEh4cbS5cuNaqqqox33nnHCA8PN3bu3OmDyP1fjx49jL/85S+nbcN17hk66Qb1w4cPG7GxscbLL79sVFdXG1988YVhtVrrnSXs9ddfN5KTk42dO3caJSUlxoMPPmice+65RmVlpXkfwM+cnO9ly5YZYWFhxgcffODWa6+//nqjX79+Rk5OjlFWVmbMmDHDSE5ONvLy8rwXcAA4OedLly41IiIijM8//9w5o2N8fLzxzjvv1PlarvGzo1MmvigsLDQkGStXrjzja7nOz+x0vwkD6XucIgummDJliiHJsFqtLltGRoZhGIZhtVqNBQsWGIbhmJXtqaeeMtq3b2/YbDbj4osvNj755BNfhu+31qxZY/Tr18+IiYkx2rVrZ0yePNk5rezJOTcMw/jggw+MTp06GREREcYFF1xgfPzxx74K2++1bNnSWLJkSa3jXOeed+qPoa+//tro0aOHERERYaSnpxvz5s1zPrd69WrDarUav/zyi/PYjBkzjKSkJCMqKsoYOHAgf1g4g5Pz3a9fPyMoKKjW93rNH3JOzfeRI0eMMWPGGAkJCUbLli2Nq6++mmUi3HDqNf6Pf/zDOP/8843o6GgjIyPDmD9/vvM5rnHPODXnmzdvNiTVWShxnTfcmX4TBsr3uMUwThpLBAAAAABoFO7JAgAAAAAPosgCAAAAAA+iyAIAAAAAD6LIAgAAAAAPosgCAAAAAA+iyAIAAAAAD6LIAgAAAAAPosgCAAAAAA+iyAIAmGLfvn2yWCzat2+f269ZsmSJxo0b572g3HDPPffonnvucattenq65s+fX+dzK1eulMVi8WBk9XviiSf07LPPmvJeAIDaQnwdAAAAdcnLy9OkSZP03Xff+TSOV155xafvfzYeeeQRde7cWddcc40uuOACX4cDAM0OPVkAAJ+YMWOGUlNTtX379jqfnzlzpq677jolJCRIku68805NmDBBI0eOlM1m0znnnKM333zTrfdKT0/XM888o4svvljR0dHq3bu3S/H2/fff6/LLL1eLFi3Utm1bPfXUUzIMw/m+d955pyTJbrdr8uTJSkxMVFJSkiZOnKgBAwa49F6tX79effv2VUxMjLp27arVq1e7xPL0008rNTVVaWlpevTRR1VZWek89/PPP6/zzjtPsbGx6t27t5YvX+7yGR566CGlpaWpe/fuqqys1AMPPKDExETFxcWpX79+2rBhgyQpIiJCY8eO1fTp093KDwDAsyiyAACmmzp1qubPn681a9YoIyOj1vPV1dWaP3++brnlFpfjb775pu6//34dOXJEjz/+uMaOHausrCy33nP+/PlauHChCgoKdOGFF+oPf/iDJOngwYO64oorNHLkSP32229atWqV3n//fc2ZM6fWOV588UUtWrRIK1eu1L59+xQVFaU1a9a4tMnMzNTcuXOVn5+vXr16afz48S7Pb9myRT/99JNWrVqlJUuWaObMmZKkF154QS+88ILee+895eXl6eGHH9aIESNcisE1a9Zox44dWrlypd5880199NFH2rp1q/Lz8zV06FD98Y9/dLa96aabtGTJEhUUFLiVHwCA51BkAQBM9fjjj2v27NlatWqVOnToUGeb9evXq7CwUBdddJHL8UGDBmnw4MEKCQnRTTfdpKqqKu3Zs8et9x0zZozOP/98hYSEaNSoUfrpp58kSW+99ZY6deqkhx9+WGFhYWrfvr0mT56sf/zjH7XO8corr+jRRx9VRkaGIiIi9NRTT6l169YubcaPH68LLrjAGePu3budz1ksFr344ouyWq0655xzNGnSJGdv3GuvvaZHH31U3bt3V0hIiG6++WZdd911mjt3rvP1t9xyi2w2m+Li4hQTE6Pc3FzNnTtXW7du1Z///Gd9//33zrYdOnRQQkKCvvzyS7fyAwDwHIosAICptm7dqlatWuntt9+ut82BAwfUqlUrhYWFuRxv2bKlcz8yMlKSo9fLHae+1m63S3JMyLF582bFxcU5t3HjxiknJ6fWOfbv36/09HTn4+DgYJfHkpScnOzcDwsLU1VVlfNxixYtXOJIT093vs/+/ftrFZ0dOnRwmSgkPj7euX/jjTfqhRdeUGZmpnr27Km0tDTNmjXL5fUpKSkNmmgEAOAZFFkAAFMtWrRIr776qqZNm6YtW7bU266mCPK2Nm3a6IorrlBBQYFzO3DggDZu3Firbdu2bfXLL784HxuGoQMHDrj9XseOHVNpaanz8Z49e9S+fXtJUrt27fTzzz+7tN+1a5dSUlLqPNfu3bvVu3dvrV27VoWFhfq///s/PfbYYy45DQ4Odjs2AIDnUGQBAEwVFhama6+9VjfddJPuuOMOVVRU1GqTnp6uvLw8lZWVeT2eW2+9Vd98843++c9/qqqqSrm5uRo1apQmTZpUq+348eP1zDPPaOfOnaqoqND06dOVnZ3t9ntVVlbq/vvvV1lZmXbu3KlnnnlG9957ryRp7NixmjVrljZs2KDq6mr961//0scff6zRo0fXea6lS5fq2muv1e7duxUZGan4+HiFhoa69Hbl5OSoTZs2DcwIAKCxmMIdAOATc+bMUefOnTVt2jTn5A81evToofj4eH3zzTe64oorvBpHu3bttHz5cj366KN66KGHFBISohEjRuiFF16o1fbBBx9UcXGxhgwZovLyct1yyy1KTU2tNayxPq1atVJSUpJSUlIUHR2t++67z1lk/elPf5LFYtHNN9+snJwcZWRkaOnSpfV+/gcffFBZWVkaMGCAioqK1L59ey1ZssQ5XPG3337TwYMHNWjQoLNLDADgrFmMmjlqAQBoQh599FEVFhY2qXWqvvvuO7Vt21ZJSUmSHMMF4+LitGTJEl111VU+js7V888/r2+++Ubvvfeer0MBgGaHniwAQJP0yCOPqEePHjp8+LDLELi6JCUlqaioqM7nNmzYoPPOO88jMb399tvasmWLPvjgA1mtVr344osKDQ3VJZdc4pHze0p5eblee+01LV261NehAECzRE8WAKDJev/997V8+fI6p1P3hcLCQk2YMEGfffaZKioq1KNHDz377LPq1auXr0Nz8eSTTyoyMlL/8z//4+tQAKBZosgCAAAAAA9idkEAAAAA8CCKLAAAAADwIIosAAAAAPAgiiwAAAAA8CCKLAAAAADwIIosAAAAAPAgiiwAAAAA8CCKLAAAAADwoP8HeYWaLCA1Q2wAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 10. 可视化不同k值的表现（使用最佳参数组合中的其他参数）\n",
    "fixed_params = {\n",
    "    'weights': grid_search.best_params_['weights'],\n",
    "    'p': grid_search.best_params_['p']\n",
    "}\n",
    "\n",
    "k_values = range(1, 21)\n",
    "cv_scores = []\n",
    "for k in k_values:\n",
    "    knn = KNeighborsClassifier(n_neighbors=k, **fixed_params)\n",
    "    scores = cross_val_score(knn, X_scaled, y, cv=5, scoring='accuracy')\n",
    "    cv_scores.append(scores.mean())\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # macOS 系统\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(k_values, cv_scores, marker='o')\n",
    "plt.axvline(x=grid_search.best_params_['n_neighbors'], color='r', linestyle='--',\n",
    "            label=f'Best k={grid_search.best_params_[\"n_neighbors\"]}')\n",
    "plt.xlabel('k (n_neighbors)')\n",
    "plt.ylabel('Cross-Validated Accuracy')\n",
    "plt.title('KNN不同k值表现（其他参数固定为最优组合）')\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ea2203ca-9acd-410c-9468-cf8496fcab71",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
